﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LojaVirtual.Comuns;
using System.Data.Entity;
using System.Linq.Expressions;
using System.Data;
using System.Data.Objects;

namespace LojaVirtual.Infra
{
    public class GenericRepository<T> where T : Entidade
    {
        private readonly IDbSet<T> db;
        private readonly DbContext context;

        public GenericRepository()
        {
            context = new LojaVirtualContext();
            db = context.Set<T>();
        }

		public GenericRepository(DbContext context, DbSet<T> db)
		{
			this.context = context;
			this.db = db;
		}

        public void Delete(int id)
        {
			var entidade = db.Single(i => i.ID == id);
			Delete(entidade);
        }

        public void Delete(T entidade)
        {
			db.Remove(entidade);
        }

        public IEnumerable<T> Recuperar()
        {
			return db.ToList();
        }

        public T Recuperar(int id)
        {
			var entidade = db.Single(i => i.ID == id);

			return entidade;
        }

        public void Inserir(T entity)
        {
            db.Add(entity);

        }

        public void Atualizar(T entidade)
        {
			db.Attach(entidade);
			context.Entry(entidade).State = EntityState.Modified;
        }

        public void Dispose()
        {
			context.Dispose();
        }
    }
}
